// Copyright (c) 2025 Huawei Technologies Co., Ltd.
// openUBMC is licensed under Mulan PSL v2.
// You can use this software according to the terms and conditions of the Mulan PSL v2.
// You may obtain a copy of Mulan PSL v2 at:
//         http://license.coscl.org.cn/MulanPSL2
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
// MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
// See the Mulan PSL v2 for more details.
//
// Description: 管理KVM心跳报文发送

#ifndef HEARTBEAT_MANAGER_HPP
#define HEARTBEAT_MANAGER_HPP

#include <boost/asio/steady_timer.hpp>
#include <boost/asio/io_context.hpp>
#include <chrono>
#include <functional>
#include <iostream>
#include <vector>
#include "PackData.hpp"

class HeartbeatManager {
public:
    using HeartbeatCallback = std::function<void(const std::vector<uint8_t>&)>;

    HeartbeatManager(boost::asio::io_context& io_context, std::chrono::seconds interval, HeartbeatCallback callback);

    void Start();
    void Stop();
    void SetInterval(std::chrono::seconds interval);

private:
    boost::asio::steady_timer timer_;
    std::chrono::seconds interval_;
    HeartbeatCallback callback_;
    std::vector<uint8_t> heartbeat_message_;

    void ScheduleHeartbeat();
};

#endif // HEARTBEAT_MANAGER_HPP